package com.scs.application.modules.upms.login.strategy;

import com.alibaba.fastjson.JSONObject;
import com.scs.application.modules.upms.login.token.BaseAccessToken;
import com.scs.application.modules.upms.dto.LoginDTO;

import java.util.Map;

/**
 * @Description: 登录策略
 */
public interface LoginStrategy<L extends LoginDTO, A extends BaseAccessToken> {


    /**
     * 是否支持此种登录方式
     *
     * @param loginDTO
     * @return
     */
    boolean isSupport(LoginDTO loginDTO);

    /**
     * 登录之前
     * @param loginDTO
     */
    default void preLogin(L loginDTO){}

    /**
     * 获取参数map对象
     *
     * @param loginDTO
     * @return
     */
    Map<String, Object> getParameterMap(L loginDTO);

    /**
     * 依据oauth 返回的结构构建token
     * @param resp
     * @return
     */
    A buildToken(JSONObject resp);

    /**
     * 登录之后
     */
    default void postLogin(L loginDTO, A accessToken){}

}
